
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author jose
 */
public class GestorBD {

    Connection con;
    Statement st;
    ResultSet rs;

    /**
     * Prepara el código java para lanzar sentencias
     *
     * @throws SQLException Lanza excepción en lugar de capturarla
     */
    public void PrepararSentencia() throws SQLException {
        st = con.createStatement();
    }

    /**
     * Establece la conexión con la BD
     *
     * @throws InstantiationException
     * @throws IllegalAccessException
     */
    public void abrirConexion() throws InstantiationException, IllegalAccessException {

        try {
            String userName = "Invitado";
            String password = "liker";

            String url = "jdbc:mysql://127.0.0.1/consumoelectrico";

            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection(url, userName, password);

            System.out.println("Conexion a la BD");

        } catch (ClassNotFoundException e) {
            // Error. No se ha encontrado el driver de la BD
            e.printStackTrace();
        } catch (SQLException e) {
            // Error. No se ha podido conectar a la BD
            e.printStackTrace();
        }
    }

    /**
     * Ejecuta cada consulta, recibiendo el nombre de la consulta a devolver
     *
     * @param consulta
     * @throws SQLException
     */
    public void EjecutarConsulta(String consulta) throws SQLException {
        rs = st.executeQuery(consulta);
    }

    /**
     * Cierra la conexión con la BD
     */
    public void cerrarConexion() {
        try {
            con.close();
            System.out.println("Conexion cerrada");
        } catch (SQLException e) {
            System.out.println("Error al cerrar conexion");
        }
    }

    public void ProcesarResultadoPorPosicion() throws SQLException {
        //rs.beforefirst(); Pone el puntero una posicion antes de la primera posición, de ahí que
        //sea necesario empezar con un .next
        rs.beforeFirst();
        while (rs.next()) {
            System.out.println(rs.getString(2));
        }
        //Recuperando strings nos curamos en salud, ya que si fuera un entero... siempre podríamos
        //recuperarlo con un parseInt
    }

    public static void main(String[] args) {
        GestorBD c = new GestorBD();
        String sentencia = "select * from poblaciones";

        try {
            c.abrirConexion();//Solo se realiza una vez
            c.PrepararSentencia();//Solo se realiza una vez
            c.EjecutarConsulta(sentencia);
            c.ProcesarResultadoPorPosicion();
            c.cerrarConexion();//Solo se realiza una vez
        } catch (Exception e) {
            System.out.println("Se ha producido una excepción");
        }
    }
}
